import { Controller, Get, Post, Body, Patch, Param, Delete, UseGuards, Request } from '@nestjs/common';
import { UsersService } from './users.service';
import { AuthGuard } from 'src/guard/auth.guard';

import { Roles } from 'src/constants/role/roles.decorator';
import { Role } from 'src/constants/role/role.enum';
import { Throttle } from '@nestjs/throttler';
import { NoAuthGuard } from 'src/guard/Noauth.guard';

// 使用限流器，限制接口的访问频率，默认情况下，每个IP每10秒内只能访问5次
@Throttle({ default: { limit: 5, ttl: 10000 } })
@Controller('V1/users')
export class UsersController {
  constructor(private readonly usersService: UsersService) {
  }
  
  /**
   * 用户注册接口
   * @param data 注册的数据，包括用户名、密码等
   * @param req 请求对象，用于获取额外的请求信息
   * @returns 返回用户的注册结果
   */
  @NoAuthGuard()
  @Post("/register")
  register(@Body() data, @Request() req) {
    return this.usersService.register(data, req);
  }

  /**
   * 用户登录接口
   * @param data 登录的数据，通常包括用户名和密码
   * @param req 请求对象，用于获取额外的请求信息
   * @returns 返回用户的登录结果，如token
   */
  @NoAuthGuard()
  @Post("/login")
  login(@Body() data, @Request() req) {
    return this.usersService.login(data, req);
  }

  /**
   * 获取用户个人资料
   * @param req 请求对象，从中获取用户ID来查询资料
   * @returns 返回用户的个人资料
   */
  @UseGuards(AuthGuard)
  @Roles(Role.Admin, Role.User)
  @Get('getProfile')
  async getProfile(@Request() req) {
    return this.usersService.getProfile(req.user.id);
  }

  /**
   * 更新用户个人资料
   * @param req 请求对象，包含需要更新的用户信息
   * @returns 返回更新结果或新的用户信息
   */
  @UseGuards(AuthGuard)
  @Roles(Role.Admin, Role.User)
  @Post('updateProfile')
  async updateProfile(@Request() req) {
    return this.usersService.updateProfile(req);
  }

 

}